671. 二叉树中第二小的节点

671. 二叉树中第二小的节点

Similar Question

leading to the advanced question

Solution Tips

方案一: DFS

var findSecondMinimumValue = function(root) {
    // 特殊遍历, 突出一个剪枝
    // 等于较小的那个, 那么 root 一定是全部节点里面最小的那个
    // 往更大的那个找, 如果左右节点相等, 就两个都找
    // 剪枝就是大的那个方向不用找, 就找相等的那个
    let min = root.val;
    let secondMin = Number.MAX_SAFE_INTEGER;
    dfs(root);
    return secondMin;

    function dfs(node) {
        if (node === null) return;

        if (node.val === min) {
            dfs(node.left);
            dfs(node.right);
        }
        else if (node.val > min) {
            secondMin = Math.min(secondMin, node.val);
        }
    }
};